#include "MainWindow.h"

extern QSqlDatabase enjoylifedb;

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent)
{
    setWindowTitle("Martinez + Marzari & ASoc. SA - Bienvenido");
    showMaximized();
}

MainWindow::MainWindow(QWidget *parent, QString user_, QString host_, int port_) :
    QMainWindow(parent)
{
    setWindowIcon(QIcon("://Images/MMAsocLogo.png"));
    user = user_;
    host = host_;
    port = port_;
    setWindowTitle("Martinez + Marzari & ASoc. SA - " + user + "@" + host + ":" + QString::number(port));
    showMaximized();
    setStyleSheet("font: 10pt \"Helvetica57-Condensed\"");
    CreateActions();
    CreateMainMenu();
    qApp->setStyleSheet("QMenuBar::item:selected {background-color: rgb(99,99,99);"
                        "color: rgb(255, 255, 255;border-style: solid)}");

    tab = new QTabWidget(0);
    tab->setMovable(true);

    /** Barra de herramientas con las opciones para abrir los módulos.
     * Las opciones que contiene son abrir el módulo cliente, el módulo de
     * administraión y la ayuda.
     */
//    main_options_toolbar = new CustomToolbar(this);
//    CreateMainActions();
//    main_options_toolbar->addAction(main_client_action);
//    main_options_toolbar->addAction(main_domain_action);
//    main_options_toolbar->addAction(main_autoadmin_action);
//    main_options_toolbar->addAction(main_expirationNIC_action);
//    main_options_toolbar->addSeparator();
//    main_options_toolbar->addAction(main_movimientos_action);
//    main_options_toolbar->addAction(main_cheques_action);
//    main_options_toolbar->addAction(main_cuentaCorriente_action);
//    main_options_toolbar->addAction(main_gastoMensual_action);
//    main_options_toolbar->addAction(main_cobroMensual_action);
//    main_options_toolbar->addAction(main_pagoMensual_action);
//    main_options_toolbar->addSeparator();
//    main_options_toolbar->addAction(main_help_action);
//    addToolBar(Qt::LeftToolBarArea,main_options_toolbar);

    status = new QStatusBar(this);
    status->setStyleSheet("background-color: rgb(99, 99, 99);color: rgb(255, 255, 255)");
    setStatusBar(status);

    setCentralWidget(tab);
}

void MainWindow::CreateMainMenu()
{
    // Menu archivo
    archivo_menu = menuBar()->addMenu("&Archivo");
    archivo_menu->addAction(backupDB_action);
    archivo_menu->addAction(restoreDB_action);
    archivo_menu->addSeparator();
    archivo_menu->addAction(exit_action);

    //Menu editar
    editar_menu = menuBar()->addMenu("&Editar");

//    // Menu cliente
//    client_menu = menuBar()->addMenu("Cliente");
//    client_menu->setEnabled(false);

//    // Menu administración
//    administration_menu = menuBar()->addMenu("Administración");
//    administration_menu->setEnabled(false);

    // Menu Ayuda
    //help_menu = menuBar()->addMenu("Ayuda");
}

void MainWindow::CreateActions()
{
    // Acción Crear Backup: crea un backup de la base de datos.
    backupDB_action = new QAction("Exportar Backup",this);
    backupDB_action->setIcon(QIcon(":/Icons/backupDB-32x32.png"));
    backupDB_action->setShortcut(QKeySequence::Save);
    backupDB_action->setStatusTip("Realiza un backup de la base de datos");
    connect(backupDB_action,SIGNAL(triggered()),this,SLOT(BackupDB()));

    // Acción Restaurar Backup: restaura el backup de la base de datos.
    restoreDB_action = new QAction("Importar Backup",this);
    restoreDB_action->setIcon(QIcon("://Icons/restaurarDB-32x32.png"));
    restoreDB_action->setShortcut(QKeySequence::Open);
    restoreDB_action->setStatusTip("Restaura la Base de Datos a un punto anterior");
    connect(restoreDB_action,SIGNAL(triggered()),this,SLOT(RestoreDB()));

    // Acción Salir: Permite cerrar la aplicacion.
    exit_action = new QAction("Salir",this);
    exit_action->setIcon(QIcon("://Icons/cancelar-32x32.png"));
    exit_action->setShortcut(QKeySequence::Close);
    exit_action->setStatusTip("Produce la salida del programa");
    connect(exit_action,SIGNAL(triggered()),this,SLOT(CloseAndBackup()));
}

void MainWindow::About()
{

}

void MainWindow::CreateMainActions()
{

}

void MainWindow::CloseAndBackup()
{
//    QString nombreArchivo = "EnjoyLifeDB-";
//    QString usuario = enjoylifedb.userName();
//    QDate date;
//    QString formatoFecha = "ddMMyyyy";
//    QString fecha = date.currentDate().toString(formatoFecha);
//    QTime time;
//    QString formatoTime = "hhmmss";
//    QString hora = time.currentTime().toString(formatoTime);
//    QString extension = ".backup";
//    QString idArchivo = nombreArchivo + usuario + "-" + fecha + "-" + hora + extension;

//    QDir directorio;
//    QString dir = directorio.currentPath() + "/BackupDB/AntesDeCerrar/" + usuario + "/" + fecha + "/";
//    directorio.setPath(dir);
//    QString dirArchivo = directorio.absolutePath() + "/" + idArchivo;

//    if (!directorio.exists())
//        directorio.mkpath(dir);

//    QString programaBak = "pg_dump";
//    QStringList argumentosBak;
//    argumentosBak << "-U" << enjoylifedb.userName() << "-w" << "-c" << "-F" << "c" << "-f" << dirArchivo << "enjoylifedb";
//    QProcess procesoBak;
//    procesoBak.start(programaBak, argumentosBak);
//    if (procesoBak.waitForFinished(30000)) {
//        if (procesoBak.exitCode() < 0) {
//            QString error = procesoBak.errorString();
//            QMessageBox::critical(this,"Error!", tr("Error al intentar hacer el backup de la base de datos.").arg(error));
//            enjoylifedb.rollback();
//            return;
//        }
//        enjoylifedb.commit();
//        close();
//    }
}

void MainWindow::BackupDB()
{
//    QString nombreArchivo = "EnjoyLifeDB-";
//    QString usuario = enjoylifedb.userName();
//    QDate date;
//    QString formatoFecha = "ddMMyyyy";
//    QString fecha = date.currentDate().toString(formatoFecha);
//    QTime time;
//    QString formatoTime = "hhmmss";
//    QString hora = time.currentTime().toString(formatoTime);
//    QString extension = ".backup";
//    QString idArchivo = nombreArchivo + usuario + "-" + fecha + "-" + hora + extension;

//    QDir directorio;
//    QString dir = directorio.homePath() + "/Desktop/";
//    QFileDialog fd(this);
//    fd.setFileMode(QFileDialog::Directory);
//    fd.setOption(QFileDialog::ShowDirsOnly);
//    fd.setDirectory(dir);
//    fd.setNameFilter("Backup files (*.backup)");
//    fd.exec();
//    directorio.setPath(fd.directory().absolutePath());
//    QString dirArchivo = directorio.absolutePath() + "/" + idArchivo;


//    QString programaBak = "pg_dump";
//    QStringList argumentosBak;
//    argumentosBak << "-U" << enjoylifedb.userName() << "-w" << "-c" << "-F" << "c" << "-f" << dirArchivo << "enjoylifedb";
//    QProcess procesoBak;
//    procesoBak.start(programaBak, argumentosBak);
//    if (procesoBak.waitForFinished(30000)) {
//        if (procesoBak.exitCode() < 0) {
//            QString error = procesoBak.errorString();
//            QMessageBox::critical(this,"Error!", tr("Error al intentar hacer el backup de la base de datos.").arg(error));
//            enjoylifedb.rollback();
//            return;
//        }
//        enjoylifedb.commit();
//    }
}

void MainWindow::RestoreDB()
{
//    QDir directorio;
//    QString dir = directorio.homePath() + "/BackupDB/";
//    QFileDialog fd(this);
//    QString file = fd.getOpenFileName(this, "Abrir Archivo", dir, "Backup files (*.backup)");
//    QString dirArchivo = directorio.absolutePath() + "/" + file;

//    if (file.isEmpty())
//        return;
//    else {
//        DropTables();
//        qDebug() << "Paso por aca";
//        QString programaRes = "pg_restore";
//        // pg_restore.exe -U usuario -w -d baseDatos archivo
//        QStringList argumentosRes;
//        argumentosRes << "-U" << enjoylifedb.userName() << "-w" <<"-d" << enjoylifedb.databaseName() << dirArchivo;
//        QProcess procesoRes;
//        procesoRes.start(programaRes, argumentosRes);
//        if (procesoRes.waitForFinished(30000)) {
//            //        qDebug() << "Codgigo error1: " << procesoRes.exitCode();
//            if (procesoRes.exitCode() > 1) {
//                QString error = procesoRes.errorString();
//                QMessageBox::critical(this,"Error!", tr("Error al intentar restaurar la base de datos.").arg(error));
//                return;
//            }
//            qDebug() << "Codgigo error2: " << procesoRes.exitCode();
//        }
//        qDebug() << "Codgigo error3: " << procesoRes.exitCode();
//    }
}

void MainWindow::Help()
{

}
